menuitem: Fix some possible problems with arrow_gadget
authorMatthias Clasen <mclasen@redhat.com>
Sun, 17 Apr 2016 05:09:32 +0000 (01:09 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 17 Apr 2016 05:09:32 +0000 (01:09 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=765134 shows
a stacktrace where we end up with arrow_gadget being NULL
despite the conditions for its presence being satisfied.

This commit makes sure we call update_arrow_gadget() whenever
any of the conditions changes. This should fix the reported
crash.

gtk/gtkmenuitem.c

index 419f4c5f4db38241a390cbbbd18dbd5f4711bfcf..65af892abaf8de98d987635e3e9e8355c2b21313 100644 (file)
@@ -1528,7 +1528,10 @@ gtk_menu_item_set_submenu (GtkMenuItem *menu_item,
   if (priv->submenu != submenu)
     {
       if (priv->submenu)
-        gtk_menu_detach (GTK_MENU (priv->submenu));
+        {
+          gtk_menu_detach (GTK_MENU (priv->submenu));
+          priv->submenu = NULL;
+        }
 
       if (submenu)
         {
@@ -1536,10 +1539,10 @@ gtk_menu_item_set_submenu (GtkMenuItem *menu_item,
           gtk_menu_attach_to_widget (GTK_MENU (submenu),
                                      widget,
                                      gtk_menu_item_detacher);
-
-          update_arrow_gadget (menu_item);
         }
 
+      update_arrow_gadget (menu_item);
+
       if (gtk_widget_get_parent (widget))
         gtk_widget_queue_resize (widget);
 
@@ -2348,6 +2351,8 @@ gtk_menu_item_parent_set (GtkWidget *widget,
                                        menu->priv->accel_group,
                                        TRUE);
 
+  update_arrow_gadget (menu_item);
+
   if (GTK_WIDGET_CLASS (gtk_menu_item_parent_class)->parent_set)
     GTK_WIDGET_CLASS (gtk_menu_item_parent_class)->parent_set (widget, previous_parent);
 }